package com.xhb.biz.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.noear.solon.validation.annotation.NotNull;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_download")
public class DownloadPO implements Serializable {

    private static Map<Integer, String> statusTransMap = new HashMap<>();

    static {
        statusTransMap.put(null, "未知");
        statusTransMap.put(0, "未知");
        statusTransMap.put(1, "正在进行中");
        statusTransMap.put(2, "完成");
        statusTransMap.put(3, "取消");
        statusTransMap.put(4, "中断");
    }

    @NotNull
    @TableId(type = IdType.NONE)
    private String id;

    /**
     * 文件名称
     */
    private String fileName;

    /**
     * 文件下载
     */
    private String filePath;

    /**
     * 原文件路径
     */
    private String url;

    /**
     * 下载时间
     */
    private Date downloadTime;

    /**
     * 文件类型
     */
    private String type;

    /**
     * 文件状态
     * 0 未识别
     * 1 正在进行中
     * 2 完成
     * 3 取消
     * 4 中断
     * -1 无法识别
     */
    private Integer status;

    /**
     * 进度条
     */
    private Integer progressBar;

    /**
     * 当前下载速度估计值（字节/秒）
     */
    private Long currentSpeed;

    /**
     * 文件的总大小（字节）
     */
    private Long totalBytes;

    /**
     * 接收（下载）的字节数
     */
    private Long receivedBytes;

    public String getStatusName() {
        return statusTransMap.get(status);
    }

    /**
     * 获取进度
     *
     * @return
     */
    public int getProgress() {
        if (totalBytes != null && totalBytes != 0 && receivedBytes != null
                && receivedBytes != 0 && receivedBytes <= totalBytes) {
            return (int) (totalBytes / receivedBytes * 100);
        }
        return 0;
    }

}
